/*
 * @Description: 
 * @Author: changqing
 * @Date: 2021-08-29 22:40:32
 * @LastEditTime: 2021-08-29 22:48:40
 * @LastEditors: changqing
 * @Usage: 
 */

var { of,timer,interval,Subject } = require("rxjs");
var { map, take,switchAll } = require("rxjs/operators");

const transformStreamToObservable = (round) =>
  timer(0, 1000).pipe(
  map((data) => `数据流 ${round}: ${++data}`),
  take(3)
);

const subject = new Subject();

const stream = subject.pipe(map((round) => transformStreamToObservable(round)));

stream.pipe(switchAll()).subscribe((result) => console.log(result));

// 第一次事件
subject.next(1);

// 第二次事件
setTimeout(() => {
subject.next(2);
}, 4000);

// 第三次事件
setTimeout(() => {
subject.next(3);
}, 5000);

// 数据流 1: 1
// 数据流 1: 2
// 数据流 1: 3 第一次事件流1结束
// 数据流 2: 1 第二次事件流开始，产生事件流2
// 数据流 3: 1 事件流2还未结束，第三次事件开始了，产生事件流3
// 数据流 3: 2
// 数据流 3: 3